#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
int sum = 0;
pthread_mutex_t lock;			//锁变量
/**
 * @brief 子线程执行函数,全局变量与两个子线程产生伪直觉的现象
 * 先抢到锁的线程先运行，运行完成之后才会轮到下一个，本质在时间上面运行了两次for循环
 * @param args 
 * @return void* 
 */
void* myfunc(void* args)
{
	pthread_mutex_lock(&lock);		//锁住这段代码
	for(int i = 0; i< 100000;i++)
	{
		sum++;
	}
	pthread_mutex_unlock(&lock);	//解锁这段代码
	return NULL;
}

int main(void)
{
	pthread_t th1;
	pthread_t th2;  
	pthread_mutex_init(&lock,NULL);			//初始化锁                         
	pthread_create(&th1,NULL,myfunc,NULL);   
	pthread_create(&th2,NULL,myfunc,NULL);  
    pthread_join(th1,NULL);       
	pthread_join(th2,NULL);  
	//理论应该打印200000，其实不是  
	//race condition 竞争 ---- 引入锁mutex(锁住一段代码) 	----	抢锁，谁先抢到，谁先运行 
	printf("%d\n",sum);         
	return 0;

}